﻿Imports System.Data.Common

Public Class DRemision_Inv
    Public NumRemision As String
    Public FechaRemision As String
    Public CodProducto As String
    Public CodBdProd As String
    Public Cantidad As Double
    Public Cantidad_Dev As Double
    Public Costo_Unit As Double
    Public Costo_Total As Double
    Public Serial As String
    Public Porc_Iva As Double
    Public CodUsuario As String
    Public Ip As String

    Public Shared Function Nuevo(mrem As GBDZafiro.MRemision_Inv, ByVal drem As List(Of DRemision_Inv)) As Resultado
        Dim conexion As New ConexionBD.ConexionBD()
        Dim oResultado As New Resultado
        Dim numRem As String = ""
        oResultado.ExisteError = conexion.IniciaTransaccion
        If oResultado.ExisteError Then
            Dim sentencia As String
            Dim ok As Boolean = False
            oResultado = Consecutivo.obtenerNumero("REMISION_INV", conexion)
            If Not String.IsNullOrEmpty(oResultado.NumSoporte) Then
                numRem = oResultado.NumSoporte
                mrem.NumRemision = numRem
                conexion.VerificaParametroError = "S"
                'Guardar maestro
                oResultado = MRemision_Inv.Nuevo(mrem, conexion)
                If Not oResultado.ExisteError Then
                    sentencia = "SP_DREMISION_INV_I"
                    For Each oD In drem
                        conexion.ParametroEntrada = New List(Of DbParameter)
                        conexion.ParametroEntrada.Add(ConexionBD.ConexionBD.ParamInString(conexion, numRem, "P_NUM_REMISION_INV"))
                        conexion.ParametroEntrada.Add(ConexionBD.ConexionBD.ParamInFecha(conexion, oD.FechaRemision, "P_FECHA_REMISION"))
                        conexion.ParametroEntrada.Add(ConexionBD.ConexionBD.ParamInString(conexion, oD.CodProducto, "P_COD_PRODUCTO"))
                        conexion.ParametroEntrada.Add(ConexionBD.ConexionBD.ParamInString(conexion, oD.CodBdProd, "P_COD_BD_PROD"))
                        conexion.ParametroEntrada.Add(ConexionBD.ConexionBD.ParamInDouble(conexion, oD.Cantidad, "P_CANTIDAD"))
                        conexion.ParametroEntrada.Add(ConexionBD.ConexionBD.ParamInDouble(conexion, oD.Costo_Unit, "P_COSTO_UNIT"))
                        conexion.ParametroEntrada.Add(ConexionBD.ConexionBD.ParamInDouble(conexion, oD.Costo_Total, "P_COSTO_TOTAL"))
                        conexion.ParametroEntrada.Add(ConexionBD.ConexionBD.ParamInString(conexion, oD.Serial, "P_SERIAL"))
                        conexion.ParametroEntrada.Add(ConexionBD.ConexionBD.ParamInDecimal(conexion, oD.Porc_Iva, "P_PORC_IVA"))
                        conexion.ParametroEntrada.Add(ConexionBD.ConexionBD.ParamInString(conexion, oD.CodUsuario, "P_COD_USUARIO"))
                        conexion.ParametroEntrada.Add(ConexionBD.ConexionBD.ParamInString(conexion, oD.Ip, "P_IP"))
                        conexion.ParametroEntrada.Add(ConexionBD.ConexionBD.ParamOutChar(conexion, "", "P_ERROR"))
                        conexion.ParametroEntrada.Add(ConexionBD.ConexionBD.ParamOutString(conexion, "", "P_MENSAJE"))
                        ok = conexion.EjecutarProcedimiento(sentencia)
                        If Not ok Then
                            Exit For
                        End If
                    Next
                    If Not ok Then
                        oResultado.Mensaje = "ERROR: " + conexion.mensaje
                        conexion.RollbackTransaccion()
                        oResultado.ExisteError = True
                    Else
                        oResultado.Mensaje = "Se ejecuto el Proceso: " + conexion.mensaje
                        conexion.CommitTransaccion()
                    End If
                End If
            Else
                oResultado.Mensaje = "Error al obtener Consecutivo: " + conexion.mensaje
                conexion.RollbackTransaccion()
            End If
        Else
            oResultado.Mensaje = "Error al Iniciar Transaccion: " + conexion.mensaje
            conexion.RollbackTransaccion()
        End If
        Return oResultado
    End Function
End Class
